<?php

/* TODO: Add code here */
/*lớp đối tượng chứa những phương thức chung */
class user_property
{
	#region Consts
	const ACT_ADD							= 10;
	const ACT_UPDATE						= 11;
	const ACT_DELETE						= 12;
	const ACT_CHANGE_PAGE					= 13;
	const ACT_SHOW_EDIT = 14;
	const ACT_GET = 15;
	const NUM_PER_PAGE = 10;
	const TBL_T_PROPERTY				= 't_property';
	
	const SQL_INSERT_PROPERTY			= 'INSERT INTO `{0}`
		(`property_id`,`name`,`value`, `content_id`,`type`,`sect_id`) 
		VALUES(\'{1}\',\'{2}\',\'{3}\',\'{4}\',\'{5}\',\'{6}\');';
	const SQL_CREATE_TABLE_T_PROPERTY		= 'CREATE TABLE `t_property` (
											  `property_id` bigint(20) NOT NULL  COMMENT \'Mã thuộc tính tăng tự động\',
											  `name` char(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT \'Tên thuộc tính\',
											  `value` text COLLATE utf8_unicode_ci COMMENT \'Giá trị thuộc tính\',
											  `type` tinyint(4) DEFAULT NULL COMMENT \'Loại thuộc tính: 1- sản phẩm,2: nhóm hàng\',
											  `content_id` int(11) DEFAULT NULL COMMENT \'ID của sản phẩm hoặc của nhóm hàng\',
											  `delete_flag` tinyint(4) DEFAULT NULL COMMENT \'0: avaiable,1 : delete\',
											  `sect_id` tinyint(4) DEFAULT NULL COMMENT \'dùng để phân loại thuộc tính để lấy gán vào combobox trong quá trình nhập\',
											  PRIMARY KEY (`property_id`)
											) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;';

	#end region
	
	
	#region Variables
	var $_objConnection;
	#end region
	
	
	#region Contructors
	/**
	 *  Phương thức khởi tạo đối tượng property đồng thời tạo connection đến db
	 *
	 * @param object $objConnection Đối tượng kết nối đến db
		
	 * @return void 
	 *
	 */
	public function user_property($objConnection)
	{
		$this->_objConnection = $objConnection;
		
	}
	#end region
	
	
	#region Private Functions
	
	#end region
	
	
	#region Public Functions
	
	
	/**
	 * Thêm một loạt câu hỏi và câu trả lời. Trong trường hợp thêm mới sản phẩm hoặc thêm mới nhóm
	 *
	 * @param int $m_object_id Mã sản phảm hoặc mã nhóm
	 * @param mixed $m_sect_id Mã nhóm để phân lấy danh sách gán vào combobox khi thêm mới sản phẩm
	 * @param int $m_type Loại: 1->sản phẩm,2->Nhóm
	 * @param array $m_arrName Màng hoặc chuỗi tên thuộc tính
	 * @param array $m_arrValue Màng hoặc chuỗi giá trị thuộc tính
	 * @return int Số lượng record được thêm mới
	 *
	 */
	public function insertPropertyBatch($m_object_id,$m_sect_id,$m_type,$m_arrName,$m_arrValue)
	{
		$strSQL = 'INSERT INTO `'.self::TBL_T_PROPERTY.'`
				(`property_id`,`name`,`value`, `content_id`,`type`,`sect_id`)VALUES' ;
		if (!is_array($m_arrName) ) 
		{
			$m_arrName = explode(user_common::STRING_SEPARATE,$m_arrName);
			$m_arrValue = explode(user_common::STRING_SEPARATE,$m_arrValue);
		}
		//print_r($m_arrName);
		$iCount = count($m_arrName);
		$strSQLValue = '';
		for($i = 0 ;$i<$iCount;$i++)
		{
			//moi dong phai tang id+1
			$intID = user_common::getMaxID(self::TBL_T_PROPERTY);
			//tránh phần cuối rống do dư separate
			if (trim($m_arrName[$i])) {
				$strSQLValue .='('.$intID.',\''.user_common::escape_mysql_string($m_arrName[$i]).'\',\''.user_common::escape_mysql_string($m_arrValue[$i]).'\','.$m_object_id.','.$m_type.','.$m_sect_id.'),' ;				
			}
		}
		
		$strSQL .= user_common::cutLast($strSQLValue,1);
		$strTableName = self::TBL_T_PROPERTY;
		if (!user_common::ExecutequeryWithCheckExistedTable($strSQL,self::SQL_CREATE_TABLE_T_PROPERTY,$this->_objConnection,$strTableName))
		{
			//echo $strSQL.'end';
			user_common::writeLog('Error add property:'.$strSQL,1);
			return false;
		}	
		return true;
	}
	
	/**
	 * Hàm lấy tất cả record của table t_property dựa vào danh sách doc_id truyền vào dùng cho việc search.
	 *	
	 * @param array $object_id mang chua doc_id va weight.
	 * @param int $type 1->san pham, ; 2->nhom san pham
	 * @param string $selectField Cho biết các field cần lấy.
	 * @return array Danh sách record 
	 * @author ThanhViet added [20111005]
	 */
	public function getPropertyByProduct($object_id,$type,$selectField='*') 
	{
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
				array($selectField, self::TBL_T_PROPERTY ,							
					'WHERE content_id = '.$object_id.' and type='.$type));
		
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getPropertyByProduct:'.$strSQL,1);
			return null;
		}	
		//print_r($arrResult);
		return $arrResult;
	}
	
	public function getPropertyBySection($object_id,$selectField='*') 
	{
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
				array($selectField, self::TBL_T_PROPERTY ,							
					'WHERE sect_id = '.$object_id));
		
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getPropertyBySection:'.$strSQL,1);
			return null;
		}	
		//print_r($arrResult);
		return $arrResult;
	}
	
	/**
	 * Hàm lấy output HTML cho product detail
	 *	
	 * @param array $object_id mang chua doc_id va weight.
	 * @param int $type 1->san pham, ; 2->nhom san pham
	 * @return array Danh sách record 
	 * @author ThanhViet added [20111005]
	 */
	public function outputPropertyForProductDetail($object_id,$type)
	{
		$arrProperty = $this->getPropertyByProduct($object_id,$type);
		if(count($arrProperty)>0)
		{
			//print_r($arrProperty);
			$strHTMl = '<div style="clear:right;width:99%;">
					<table class="tbl-list" style="width:100%">
					<thead>
					<td class="lastCell" colspan="2">'.($type==1?'Tính năng riêng':'Tính năng chung').'</td>
					</thead>';
			
			$i=0;	
			foreach($arrProperty as $item)
			{
				//neu la dong dau tien thi row do cos nen
				if($i%2==0)
				{
					$style = 'even';			
				}
				else
				{
					$style = 'odd';	
				}
				$i++;
				$strHTMl .= '<tr class="'.$style.'">
						<td style="width:30%">'.$item['name'].'</td>
						<td class="lastCell">'.$item['value'].'</td>
						</tr>';
			}
			
			$strHTMl .='</table>
					</div>';
		}	
		return $strHTMl;
		
	}
	/**
	 * Hàm lấy tất cả record của c_doc_xxxx dựa vào danh sách doc_id truyền vào dùng cho việc search.
	 *	
	 * @param array $listID mang chua doc_id va weight.
	 * @param string $prefixTable Tiền tố của table doc user_doc::TBL_T_DOC hay  user_doc::TBL_C_DOC
	 * @param string $selectField Cho biết các field cần lấy.
	 * @return array Danh sách record 
	 * @author ThanhViet added [20101005]
	 */
	public function getPropertyByIDs($listID,$type,$selectField='*') 
	{
		$strID='';
		foreach ($listID as $key)
		{
			$strID.='\''.$key['id'].'\',';
		}
		$strID = user_common::cutLast($strID,1);
		if (isset($type) && $type) 
		{
			$conditionType=' type='.$type.' and';
		}
		
		$strSQL .= user_common::prepareQuery(user_common::SQL_SELECT_FREE, 
				array($selectField, self::TBL_T_PROPERTY ,'WHERE '.$conditionType.' property_id IN ('.$strID.')'));
		
		//echo '<br>SQL:'.$strSQL;
		$arrResult =$this->_objConnection->selectCommand($strSQL);
		//print_r($arrResult);
		//echo '<br>';
		if(!$arrResult)
		{
			user_common::writeLog('getPropertyByIDs:'.$strSQL,1);
			return null;
		}	
		
		//print_r($listID);
		//chuyển kết quả vào danh sách ID đã theo thứ tự
		foreach ($arrResult as $item)
		{
			$listID[$item['property_id']] = $item;
		}
		//print_r($listID);
		return $listID;
	}
	
	/**
	 * Hàm lấy output HTML cho product detail
	 *	
	 * @param array $object_id mang chua doc_id va weight.
	 * @param int $type 1->san pham, ; 2->nhom san pham
	 * @return array Danh sách record 
	 * @author ThanhViet added [20111005]
	 */
	public function outputPropertySearchDetail($listID,$keyword,$type)
	{
		$arrProperty = $this->getPropertyByIDs($listID,$type);
		//print_r($arrProperty);
		$strHTMl = '<div style=" clear:both; width:100%;">
				<table class="tbl-list" style="width:100%">
				<thead>
				<td class="lastCell" colspan="2">Tính năng</td>
				</thead>';
		
		$i=0;	
		foreach($arrProperty as $item)
		{
			//neu la dong dau tien thi row do cos nen
			if($i%2==0)
			{
				$style = 'even';			
			}
			else
			{
				$style = 'odd';	
			}
			$i++;
			$name = user_sphinx_search::highlight_match($item['name'],$keyword,1);
			$value = user_sphinx_search::highlight_match($item['value'],$keyword,1);
			$strHTMl .= '<tr class="'.$style.'">
					<td class="col_name">'.$name.'</td>
					<td class="lastCell">'.$value.'</td>
					</tr>';
		}
		
		$strHTMl .='</table>
				</div>';
		
		return $strHTMl;
		
	}
	
	
	public function deletePropertyByProduct($object_id,$itype)
	{
		$strSQL = user_common::prepareQuery(user_common::SQL_DELETE, 
				array(self::TBL_T_PROPERTY ,							
					'WHERE content_id = '.$object_id.' and type='.$itype));
		$result = $this->_objConnection->executeSQL($strSQL);
		if ($result<1)
		{
			user_common::writeLog('deletePropertyByProduct:'.$strSQL,1);
			return false;
		}
		
		return true;
	}
	
	/**
	 * This is method outputHTMLSection select option
	 *
	 * @param mixed $arrFaq This is a description
	 * @param mixed $strKeyword This is a description
	 * @return mixed This is the return value description
	 *
	 */
	public function outputSelectHTMLProperty($arrCat)
	{
		//$strHTML= '<select id="txtCat" name="txtCat" value="" style="width: 50%;">';
		$strHTML .= '<option value="0">--Chọn hoặc gõ--</option>';
		foreach($arrCat as $item)
		{
			$strHTML .= '<option value="'.$item['property_id'].'">'.$item['name'].'</option>';
		}
		//$strHTML .= '</select>';
		return $strHTML;
	}
	#end region
}
?>